/**
 * 运行方法：
 *         roscore
 *         source ./devel/setup.sh
 *         rosrun dynamic_tutorials dynamic_reconfigure_node
 *         rosrun rqt_reconfigure rqt_reconfigure
*/
#include <ros/ros.h>
#include <dynamic_reconfigure/server.h>             // 包含必要的头文件
#include <dynamic_tutorials/TutorialsConfig.h>      //TutorialsConfig.h是配置文件所生成的

// config：是新的参数配置值，level：表示参数修改的掩码
void callback(dynamic_tutorials::TutorialsConfig &config, uint32_t level) {
    ROS_INFO("Reconfigure Request: %d %f %s %s %d", config.int_param, config.double_param, config.str_param.c_str(), config.bool_param?"True":"False", config.size);
}

int main(int argc, char **argv){
    ros::init(argc, argv, "dynamic_tutorials_test");
    dynamic_reconfigure::Server<dynamic_tutorials::TutorialsConfig> server;// 创建动态配置服务实例，会监听客户端的参数配置请求
    //dynamic_reconfigure::Server<dynamic_tutorials::TutorialsConfig>::CallbackType f = boost::bind(&callback, _1, _2);// 参数类型就是配置文件中描述的类型
    //server.setCallback(f);//将回调函数和服务端绑定，当客户端请求修改参数时，服务端即可跳转到回调函数中进行处理
    server.setCallback(boost::bind(&callback, _1, _2));
    ROS_INFO("Spinning node");
    ros::spin();
    return 0;
}
